package com.ruoyi.tag.service.impl;

import java.util.List;

import com.ruoyi.circle.mapper.CircleTagsRelMapper;
import com.ruoyi.circle.dao.ICircleBasicInfoDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.tag.mapper.TagsInfoMapper;
import com.ruoyi.tag.domain.TagsInfo;
import com.ruoyi.tag.service.ITagsInfoService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 标签管理Service业务层处理
 * 
 * @author Amia
 * @date 2025-06-05
 */
@Service
public class TagsInfoServiceImpl implements ITagsInfoService 
{
    @Autowired
    private TagsInfoMapper tagsInfoMapper;

    @Autowired
    private CircleTagsRelMapper circleTagsRelMapper;

    @Autowired
    private ICircleBasicInfoDao circleBasicInfoDao;

    /**
     * 查询标签管理
     * 
     * @param id 标签管理主键
     * @return 标签管理
     */
    @Override
    public TagsInfo selectTagsInfoById(Long id)
    {
        return tagsInfoMapper.selectTagsInfoById(id);
    }

    /**
     * 查询标签管理列表
     * 
     * @param tagsInfo 标签管理
     * @return 标签管理
     */
    @Override
    public List<TagsInfo> selectTagsInfoList(TagsInfo tagsInfo)
    {
        return tagsInfoMapper.selectTagsInfoList(tagsInfo);
    }

    /**
     * 新增标签管理
     * 
     * @param tagsInfo 标签管理
     * @return 结果
     */
    @Override
    public int insertTagsInfo(TagsInfo tagsInfo)
    {
        return tagsInfoMapper.insertTagsInfo(tagsInfo);
    }

    /**
     * 修改标签管理
     * 
     * @param tagsInfo 标签管理
     * @return 结果
     */
    @Override
    public int updateTagsInfo(TagsInfo tagsInfo)
    {
        return tagsInfoMapper.updateTagsInfo(tagsInfo);
    }

    /**
     * 批量删除标签管理
     * 
     * @param ids 需要删除的标签管理主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTagsInfoByIds(Long[] ids) {
        for (Long id : ids) {
            List<Long> circleIds = circleTagsRelMapper.selectCircleIdsByTagId(id);
            circleTagsRelMapper.deleteCircleTagsRelByTagId(id);
            for (Long circleId : circleIds) {
                circleBasicInfoDao.checkAndDeleteCircleWithoutTags(circleId);
            }
        }
        return tagsInfoMapper.deleteTagsInfoByIds(ids);
    }

    /**
     * 删除标签管理信息
     * 
     * @param id 标签管理主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTagsInfoById(Long id) {
        List<Long> circleIds = circleTagsRelMapper.selectCircleIdsByTagId(id);
        circleTagsRelMapper.deleteCircleTagsRelByTagId(id);
        for (Long circleId : circleIds) {
            circleBasicInfoDao.checkAndDeleteCircleWithoutTags(circleId);
        }
        return tagsInfoMapper.deleteTagsInfoById(id);
    }

    @Override
    public List<TagsInfo> getInfoByPostId(Long postId) {

        return tagsInfoMapper.getInfoByPostId(postId);
    }

    @Override
    public List<TagsInfo> getInfoByCircleId(Long circleId) {
        return tagsInfoMapper.getInfoByCircleId(circleId);
    }

    @Override
    public List<String> getTagCategory() {
        return tagsInfoMapper.getTagCategory();
    }

    /**
     * 根据标签ID数组查询标签信息列表
     *
     * @param ids 标签ID数组
     * @return 标签信息列表
     */
    @Override
    public List<TagsInfo> selectTagsInfoByIds(Long[] ids)
    {
        return tagsInfoMapper.selectTagsInfoByIds(ids);
    }


    @Override
    public List<TagsInfo> getAllTagsInfoList() {
        return tagsInfoMapper.getAllTagsInfoList();
    }
}
